Przykad 7.8. Realizacja algorytmu AlfaBeta
public class AlphaBetaEvaluation implements IEvaluation {
   IGameState state;    /** Stan do modyfikowania podczas poszukiwa */
   int ply;             /** Gboko kursowania, czyli zasig poszukiwa */

   public AlphaBetaEvaluation (int ply) { this.ply = ply; }
   public IGameMove bestMove (IGameState s,
                              IPlayer player, IPlayer opponent) {
      this.state = s.copy();
      MoveEvaluation move = alphabeta(ply, player, opponent,
                MoveEvaluation.minimum(), MoveEvaluation.maximum());
      return move.move;
   }

   private MoveEvaluation alphabeta (int ply, IPlayer player, IPlayer opponent,
                                     int alpha, int beta) {
      // Jeli brak ruchw, to zwr ocen stanu planszy z perspektywy gracza
      Iterator<IGameMove> it = player.validMoves(state).iterator();
      if (ply == 0 || !it.hasNext()) {
         return new MoveEvaluation (player.eval(state));
      }

      // Wybierz "maksimum z ujemnych wartoci potomkw" poprawiajce alfa
      MoveEvaluation best = new MoveEvaluation (alpha);
      while (it.hasNext()) {
         IGameMove move = it.next();

         // Rekurencyjnie oceniaj pozycj
         move.execute(state);
         MoveEvaluation me = alphabeta (ply-1, opponent, player, -beta, -alpa);
         move.undo(state);

         // Jeli poprawiono alfa, zachowaj ten ruch
         if (-me.score > alpha) {
            alpa = -me.score;
            best = new MoveEvaluation (move, alpha);
         }
         if (alpha >= beta) { return best; }  // dalsze poszukiwania
      }                                       // s bezproduktywne
      return best;
   }
}
